Essay
Normal Distribution
\[
f(x)=\frac{1}{\sigma\sqrt{2\pi}}
\exp\left(-\frac{(x-\mu)^2}{2\sigma^2}\right)
\] The normal distribution is one of the most fundamental
distributions in statistics. It has a bell-shaped curve and is perfectly
symmetric about its center. It is unimodal, meaning it has only one
peak. In a normal distribution, the mean, median, and mode are all equal
and are located at the center, with 50% of the observations falling to
the left and 50% to the right.
Any normal distribution can be standardized into a standard normal
distribution, which has a mean of 0 and a standard deviation of 1. This
makes it especially useful for probability calculations and statistical
analysis. According to the Empirical Rule, approximately 68% of
observations fall within one standard deviation of the mean, about 95%
within two standard deviations, and about 99.7% within three standard
deviations.
The total area under the normal curve is equal to 1, representing the
total probability. The distribution is continuous and extends from
negative infinity to positive infinity. It is fully described by two
parameters: the mean, which determines the center, and the standard
deviation, which determines the spread. \[
X \sim N(\mu, \sigma^2)
\]
T-distribution
The t-distribution is very similar in shape to the standard normal
distribution, but it has heavier tails. The standard normal distribution
\(N(0, 1)\) is commonly used to obtain
z-scores for statistical tests when the population standard deviation is
known. However, in most real statistical problems, the population
variance is unknown and must be estimated from the sample.
Because this estimation introduces additional uncertainty, the
t-distribution accounts for it by having wider tails than the normal
distribution. This means that extreme values are more likely under the
t-distribution than under the standard normal distribution. As a result,
hypothesis tests using the t-distribution are more conservative, making
it harder to incorrectly reject the null hypothesis.
x <- seq(-4, 4, length = 400)
y_norm <- dnorm(x)
y_t <- dt(x, df = 5)
y_tt <- dt(x, df = 10)
comparison.df <- data.frame(
x = rep(x, 3),
density = c(y_norm, y_t, y_tt),
distribution = factor(rep(c("Normal", "t (df = 5)", "t (df = 10)"), each = length(x)))
)
t.plt <- ggplot(comparison.df, aes(x = x, y = density, color = distribution)) +
geom_line(size = 1) +
labs(title = "t-Distribution vs Normal Distribution",
x = "Value", y = "Density") +
theme(plot.title = element_text(hjust = 0.5),
plot.margin = margin(t = 35, r = 20, b = 30, l = 30, unit = "pt")) +
scale_color_manual(values = c("red", "blue", "green"))
ggplotly(t.plt)
Although the Central Limit Theorem allows the normal distribution to
be used when the sample size is large, this approximation is not always
appropriate, especially for small samples. In these situations, the
t-distribution is necessary.
The t-distribution is characterized by one parameter called the
degrees of freedom (v), which is typically equal to n−1. The degrees of
freedom determine how heavy the tails are. As the sample size increases,
the degrees of freedom increase, and the t-distribution approaches the
standard normal distribution. \[
T \sim t_\nu
\]
Chi-squared distribution
The chi-squared distribution is primarily used for hypothesis testing
with categorical data or counts. It is commonly used for goodness-of-fit
tests, which examine how well observed data match expected values, and
for tests of independence, which determine whether two categorical
variables are related. The shape of the chi-squared distribution depends
on the number of degrees of freedom, and it becomes more symmetric as
the degrees of freedom increase.
In addition, the chi-squared distribution plays an important role
when working with normally distributed data. If data comes from a normal
population, then after proper scaling, the sample variance follows a
chi-squared distribution. Suppose we have k independent standard normal
random variables. If we square each one and add them together, the
resulting sum, called Q, follows a chi-squared distribution with k
degrees of freedom. \[
Q=\sum_{i=1}^k Z_i^2 \sim \chi_k^2.
\] This result is important because any normally distributed
variable can be converted into a standard normal variable using a
z-score. After standardizing the data, we can square these values and
sum them, which produces a chi-squared distribution. Because sample
variance is based on squared deviations from the mean, it can be
standardized in a similar way, and the resulting statistic also follows
a chi-squared distribution. \[
\frac{(n-1)S^2}{\sigma^2} \sim \chi_{n-1}^2.
\] As a result, we can use the chi-squared distribution to
construct confidence intervals for the population variance, test
hypotheses about variance, and help derive the t-distribution, which
will be discussed in the next section.
F-distribution
Similar to the chi-squared distribution, the F distribution is
right-skewed, non-negative, and defined on the interval \([0, \infty)\). Its shape depends on two
degrees of freedom. The F distribution is mainly used to compare two
sources of variation, especially when comparing explained variation to
unexplained variation in regression, or when comparing two population
variances.
The F distribution is formed by taking the ratio of two independent
sample variances that come from normal populations. Since sample
variances follow chi-squared distributions, their properly scaled ratio
follows an F distribution. As a result, the F distribution can be used
to test whether two population variances are equal. For example, if two
classes take the same exam but one class has much less variation in
scores than the other, this may suggest that the two classes are not
performing under the same conditions. An F-test can be used to determine
whether the difference in variances is likely due to random chance or
reflects a real difference. \[
F = \frac{S_1^2/\sigma_1^2}{S_2^2/\sigma_2^2} \sim F_{n_1-1,\; n_2-1}
\] In regression and ANOVA, the F statistic is calculated as the
ratio of explained variation vs unexplained variation, MSR/MSE. If the
model explains little more than random noise, the F value will be close
to 1. If the model explains a large amount of variation, the F value
will be much larger than 1. This helps you evaluate how good of a fit
your model is. Therefore, the F distribution is used to determine
whether observed patterns in the data are likely due to real
relationships or simply due to random variation. \[
F = \frac{MSR}{MSE} \sim F_{p,\; n-p-1}
\] Therefore, the F distribution is used to determine whether
observed patterns in the data are likely due to real relationships or
simply due to random variation.
LS0tCnRpdGxlOiAiQXNzaWdubWVudCAyOiBEaXN0cmlidXRpb25zIgphdXRob3I6ICJDaGFybGllIE1vcmdhbiIKZGF0ZTogIiBEdWU6IDAyLzEwLzI2IgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDogCiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwogICAgbnVtYmVyX3NlY3Rpb25zOiBubwogICAgdG9jX2NvbGxhcHNlZDogeWVzCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKICAgIGNvZGVfZG93bmxvYWQ6IHllcwogICAgc21vb3RoX3Njcm9sbDogeWVzCiAgICB0aGVtZTogbHVtZW4KICBwZGZfZG9jdW1lbnQ6IAogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgZmlnX2NhcHRpb246IHllcwogICAgbnVtYmVyX3NlY3Rpb25zOiB5ZXMKICAgIGZpZ193aWR0aDogMwogICAgZmlnX2hlaWdodDogMwogIHdvcmRfZG9jdW1lbnQ6IAogICAgdG9jOiB5ZXMKICAgIHRvY19kZXB0aDogNAogICAgZmlnX2NhcHRpb246IHllcwogICAga2VlcF9tZDogeWVzCmVkaXRvcl9vcHRpb25zOiAKICBjaHVua19vdXRwdXRfdHlwZTogaW5saW5lCi0tLQoKYGBge2NzcywgZWNobyA9IEZBTFNFfQojVE9DOjpiZWZvcmUgewogIGNvbnRlbnQ6ICJUYWJsZSBvZiBDb250ZW50cyI7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1zaXplOiAxLjJlbTsKICBkaXNwbGF5OiBibG9jazsKICBjb2xvcjogbmF2eTsKICBtYXJnaW4tYm90dG9tOiAxMHB4Owp9CgoKZGl2I1RPQyBsaSB7ICAgICAvKiB0YWJsZSBvZiBjb250ZW50ICAqLwogICAgbGlzdC1zdHlsZTp1cHBlci1yb21hbjsKICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZTsKICAgIGJhY2tncm91bmQtcmVwZWF0Om5vbmU7CiAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOjA7Cn0KCmgxLnRpdGxlIHsgICAgLyogbGV2ZWwgMSBoZWFkZXIgb2YgdGl0bGUgICovCiAgZm9udC1zaXplOiAyMnB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGNvbG9yOiBEYXJrUmVkOwogIHRleHQtYWxpZ246IGNlbnRlcjsKICBmb250LWZhbWlseTogIkdpbGwgU2FucyIsIHNhbnMtc2VyaWY7Cn0KCmg0LmF1dGhvciB7IC8qIEhlYWRlciA0IC0gYW5kIHRoZSBhdXRob3IgYW5kIGRhdGEgaGVhZGVycyB1c2UgdGhpcyB0b28gICovCiAgZm9udC1zaXplOiAxNXB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogIGZvbnQtZmFtaWx5OiBzeXN0ZW0tdWk7CiAgY29sb3I6IG5hdnk7CiAgdGV4dC1hbGlnbjogY2VudGVyOwp9CgpoNC5kYXRlIHsgLyogSGVhZGVyIDQgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICBmb250LXNpemU6IDE4cHg7CiAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOwogIGNvbG9yOiBEYXJrQmx1ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7Cn0KCmgxIHsgLyogSGVhZGVyIDEgLSBhbmQgdGhlIGF1dGhvciBhbmQgZGF0YSBoZWFkZXJzIHVzZSB0aGlzIHRvbyAgKi8KICAgIGZvbnQtc2l6ZTogMjBweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogZGFya3JlZDsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKaDIgeyAvKiBIZWFkZXIgMiAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxOHB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDMgeyAvKiBIZWFkZXIgMyAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxNnB4OwogICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICBmb250LWZhbWlseTogIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsKICAgIGNvbG9yOiBuYXZ5OwogICAgdGV4dC1hbGlnbjogbGVmdDsKfQoKaDQgeyAvKiBIZWFkZXIgNCAtIGFuZCB0aGUgYXV0aG9yIGFuZCBkYXRhIGhlYWRlcnMgdXNlIHRoaXMgdG9vICAqLwogICAgZm9udC1zaXplOiAxNHB4OwogIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZm9udC1mYW1pbHk6ICJUaW1lcyBOZXcgUm9tYW4iLCBUaW1lcywgc2VyaWY7CiAgICBjb2xvcjogZGFya3JlZDsKICAgIHRleHQtYWxpZ246IGxlZnQ7Cn0KCi8qIEFkZCBkb3RzIGFmdGVyIG51bWJlcmVkIGhlYWRlcnMgKi8KLmhlYWRlci1zZWN0aW9uLW51bWJlcjo6YWZ0ZXIgewogIGNvbnRlbnQ6ICIuIjsKCmJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9CgouaGlnaGxpZ2h0bWUgeyBiYWNrZ3JvdW5kLWNvbG9yOnllbGxvdzsgfQoKcCB7IGJhY2tncm91bmQtY29sb3I6d2hpdGU7IH0KCn0KYGBgCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KIyBjb2RlIGNodW5rIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBSIGNvZGUsIHdhcm5pbmdzLCBhbmQgb3V0cHV0IAojIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIG91dHB1dCBmaWxlcy4KaWYgKCFyZXF1aXJlKCJrbml0ciIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoImtuaXRyIikKICAgbGlicmFyeShrbml0cikKfQppZiAoIXJlcXVpcmUoInBhbmRlciIpKSB7CiAgIGluc3RhbGwucGFja2FnZXMoInBhbmRlciIpCiAgIGxpYnJhcnkocGFuZGVyKQp9CmlmICghcmVxdWlyZSgiZ2dwbG90MiIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygiZ2dwbG90MiIpCiAgbGlicmFyeShnZ3Bsb3QyKQp9CmlmICghcmVxdWlyZSgidGlkeXZlcnNlIikpIHsKICBpbnN0YWxsLnBhY2thZ2VzKCJ0aWR5dmVyc2UiKQogIGxpYnJhcnkodGlkeXZlcnNlKQp9CgppZiAoIXJlcXVpcmUoInBsb3RseSIpKSB7CiAgaW5zdGFsbC5wYWNrYWdlcygicGxvdGx5IikKICBsaWJyYXJ5KHBsb3RseSkKfQojIyMjCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gVFJVRSwgICAgICAgIyBpbmNsdWRlIGNvZGUgY2h1bmsgaW4gdGhlIG91dHB1dCBmaWxlCiAgICAgICAgICAgICAgICAgICAgICB3YXJuaW5nID0gRkFMU0UsICAgIyBzb21ldGltZXMsIHlvdSBjb2RlIG1heSBwcm9kdWNlIHdhcm5pbmcgbWVzc2FnZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB5b3UgY2FuIGNob29zZSB0byBpbmNsdWRlIHRoZSB3YXJuaW5nIG1lc3NhZ2VzIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGUgb3V0cHV0IGZpbGUuIAogICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cyA9IFRSVUUsICAgICMgeW91IGNhbiBhbHNvIGRlY2lkZSB3aGV0aGVyIHRvIGluY2x1ZGUgdGhlIG91dHB1dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gdGhlIG91dHB1dCBmaWxlLgogICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgY29tbWVudCA9IE5BCiAgICAgICAgICAgICAgICAgICAgICApICAKYGBgCiMjICoqRXNzYXkqKgoKIyBOb3JtYWwgRGlzdHJpYnV0aW9uCjxjZW50ZXI+CiAgPGltZyBzcmM9Imh3Ml9uZC5wbmciIHdpZHRoPSIzNTAiPgo8L2NlbnRlcj4KJCQKZih4KT1cZnJhY3sxfXtcc2lnbWFcc3FydHsyXHBpfX0KXGV4cFxsZWZ0KC1cZnJhY3soeC1cbXUpXjJ9ezJcc2lnbWFeMn1ccmlnaHQpCiQkClRoZSBub3JtYWwgZGlzdHJpYnV0aW9uIGlzIG9uZSBvZiB0aGUgbW9zdCBmdW5kYW1lbnRhbCBkaXN0cmlidXRpb25zIGluIHN0YXRpc3RpY3MuIEl0IGhhcyBhIGJlbGwtc2hhcGVkIGN1cnZlIGFuZCBpcyBwZXJmZWN0bHkgc3ltbWV0cmljIGFib3V0IGl0cyBjZW50ZXIuIEl0IGlzIHVuaW1vZGFsLCBtZWFuaW5nIGl0IGhhcyBvbmx5IG9uZSBwZWFrLiBJbiBhIG5vcm1hbCBkaXN0cmlidXRpb24sIHRoZSBtZWFuLCBtZWRpYW4sIGFuZCBtb2RlIGFyZSBhbGwgZXF1YWwgYW5kIGFyZSBsb2NhdGVkIGF0IHRoZSBjZW50ZXIsIHdpdGggNTAlIG9mIHRoZSBvYnNlcnZhdGlvbnMgZmFsbGluZyB0byB0aGUgbGVmdCBhbmQgNTAlIHRvIHRoZSByaWdodC4KCkFueSBub3JtYWwgZGlzdHJpYnV0aW9uIGNhbiBiZSBzdGFuZGFyZGl6ZWQgaW50byBhIHN0YW5kYXJkIG5vcm1hbCBkaXN0cmlidXRpb24sIHdoaWNoIGhhcyBhIG1lYW4gb2YgMCBhbmQgYSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgMS4gVGhpcyBtYWtlcyBpdCBlc3BlY2lhbGx5IHVzZWZ1bCBmb3IgcHJvYmFiaWxpdHkgY2FsY3VsYXRpb25zIGFuZCBzdGF0aXN0aWNhbCBhbmFseXNpcy4gQWNjb3JkaW5nIHRvIHRoZSBFbXBpcmljYWwgUnVsZSwgYXBwcm94aW1hdGVseSA2OCUgb2Ygb2JzZXJ2YXRpb25zIGZhbGwgd2l0aGluIG9uZSBzdGFuZGFyZCBkZXZpYXRpb24gb2YgdGhlIG1lYW4sIGFib3V0IDk1JSB3aXRoaW4gdHdvIHN0YW5kYXJkIGRldmlhdGlvbnMsIGFuZCBhYm91dCA5OS43JSB3aXRoaW4gdGhyZWUgc3RhbmRhcmQgZGV2aWF0aW9ucy4KClRoZSB0b3RhbCBhcmVhIHVuZGVyIHRoZSBub3JtYWwgY3VydmUgaXMgZXF1YWwgdG8gMSwgcmVwcmVzZW50aW5nIHRoZSB0b3RhbCBwcm9iYWJpbGl0eS4gVGhlIGRpc3RyaWJ1dGlvbiBpcyBjb250aW51b3VzIGFuZCBleHRlbmRzIGZyb20gbmVnYXRpdmUgaW5maW5pdHkgdG8gcG9zaXRpdmUgaW5maW5pdHkuIEl0IGlzIGZ1bGx5IGRlc2NyaWJlZCBieSB0d28gcGFyYW1ldGVyczogdGhlIG1lYW4sIHdoaWNoIGRldGVybWluZXMgdGhlIGNlbnRlciwgYW5kIHRoZSBzdGFuZGFyZCBkZXZpYXRpb24sIHdoaWNoIGRldGVybWluZXMgdGhlIHNwcmVhZC4KJCQKWCBcc2ltIE4oXG11LCBcc2lnbWFeMikKJCQKCiMgVC1kaXN0cmlidXRpb24KVGhlIHQtZGlzdHJpYnV0aW9uIGlzIHZlcnkgc2ltaWxhciBpbiBzaGFwZSB0byB0aGUgc3RhbmRhcmQgbm9ybWFsIGRpc3RyaWJ1dGlvbiwgYnV0IGl0IGhhcyBoZWF2aWVyIHRhaWxzLiBUaGUgc3RhbmRhcmQgbm9ybWFsIGRpc3RyaWJ1dGlvbiAkTigwLCAxKSQgaXMgY29tbW9ubHkgdXNlZCB0byBvYnRhaW4gei1zY29yZXMgZm9yIHN0YXRpc3RpY2FsIHRlc3RzIHdoZW4gdGhlIHBvcHVsYXRpb24gc3RhbmRhcmQgZGV2aWF0aW9uIGlzIGtub3duLiBIb3dldmVyLCBpbiBtb3N0IHJlYWwgc3RhdGlzdGljYWwgcHJvYmxlbXMsIHRoZSBwb3B1bGF0aW9uIHZhcmlhbmNlIGlzIHVua25vd24gYW5kIG11c3QgYmUgZXN0aW1hdGVkIGZyb20gdGhlIHNhbXBsZS4KCkJlY2F1c2UgdGhpcyBlc3RpbWF0aW9uIGludHJvZHVjZXMgYWRkaXRpb25hbCB1bmNlcnRhaW50eSwgdGhlIHQtZGlzdHJpYnV0aW9uIGFjY291bnRzIGZvciBpdCBieSBoYXZpbmcgd2lkZXIgdGFpbHMgdGhhbiB0aGUgbm9ybWFsIGRpc3RyaWJ1dGlvbi4gVGhpcyBtZWFucyB0aGF0IGV4dHJlbWUgdmFsdWVzIGFyZSBtb3JlIGxpa2VseSB1bmRlciB0aGUgdC1kaXN0cmlidXRpb24gdGhhbiB1bmRlciB0aGUgc3RhbmRhcmQgbm9ybWFsIGRpc3RyaWJ1dGlvbi4gQXMgYSByZXN1bHQsIGh5cG90aGVzaXMgdGVzdHMgdXNpbmcgdGhlIHQtZGlzdHJpYnV0aW9uIGFyZSBtb3JlIGNvbnNlcnZhdGl2ZSwgbWFraW5nIGl0IGhhcmRlciB0byBpbmNvcnJlY3RseSByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcy4KCmBgYHtyfQp4IDwtIHNlcSgtNCwgNCwgbGVuZ3RoID0gNDAwKQoKeV9ub3JtIDwtIGRub3JtKHgpCnlfdCA8LSBkdCh4LCBkZiA9IDUpCnlfdHQgPC0gZHQoeCwgZGYgPSAxMCkKCmNvbXBhcmlzb24uZGYgPC0gZGF0YS5mcmFtZSgKICB4ID0gcmVwKHgsIDMpLAogIGRlbnNpdHkgPSBjKHlfbm9ybSwgeV90LCB5X3R0KSwKICBkaXN0cmlidXRpb24gPSBmYWN0b3IocmVwKGMoIk5vcm1hbCIsICJ0IChkZiA9IDUpIiwgInQgKGRmID0gMTApIiksIGVhY2ggPSBsZW5ndGgoeCkpKQopCgoKdC5wbHQgPC0gZ2dwbG90KGNvbXBhcmlzb24uZGYsIGFlcyh4ID0geCwgeSA9IGRlbnNpdHksIGNvbG9yID0gZGlzdHJpYnV0aW9uKSkgKwogIGdlb21fbGluZShzaXplID0gMSkgKwogIGxhYnModGl0bGUgPSAidC1EaXN0cmlidXRpb24gdnMgTm9ybWFsIERpc3RyaWJ1dGlvbiIsCiAgICAgICB4ID0gIlZhbHVlIiwgeSA9ICJEZW5zaXR5IikgKwogICAgdGhlbWUocGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChoanVzdCA9IDAuNSksCiAgICAgICAgcGxvdC5tYXJnaW4gPSBtYXJnaW4odCA9IDM1LCByID0gMjAsIGIgPSAzMCwgbCA9IDMwLCB1bml0ID0gInB0IikpICsKICAgc2NhbGVfY29sb3JfbWFudWFsKHZhbHVlcyA9IGMoInJlZCIsICJibHVlIiwgImdyZWVuIikpCmdncGxvdGx5KHQucGx0KQpgYGAKQWx0aG91Z2ggdGhlIENlbnRyYWwgTGltaXQgVGhlb3JlbSBhbGxvd3MgdGhlIG5vcm1hbCBkaXN0cmlidXRpb24gdG8gYmUgdXNlZCB3aGVuIHRoZSBzYW1wbGUgc2l6ZSBpcyBsYXJnZSwgdGhpcyBhcHByb3hpbWF0aW9uIGlzIG5vdCBhbHdheXMgYXBwcm9wcmlhdGUsIGVzcGVjaWFsbHkgZm9yIHNtYWxsIHNhbXBsZXMuIEluIHRoZXNlIHNpdHVhdGlvbnMsIHRoZSB0LWRpc3RyaWJ1dGlvbiBpcyBuZWNlc3NhcnkuCgpUaGUgdC1kaXN0cmlidXRpb24gaXMgY2hhcmFjdGVyaXplZCBieSBvbmUgcGFyYW1ldGVyIGNhbGxlZCB0aGUgZGVncmVlcyBvZiBmcmVlZG9tICh2KSwgd2hpY2ggaXMgdHlwaWNhbGx5IGVxdWFsIHRvIG7iiJIxLiBUaGUgZGVncmVlcyBvZiBmcmVlZG9tIGRldGVybWluZSBob3cgaGVhdnkgdGhlIHRhaWxzIGFyZS4gQXMgdGhlIHNhbXBsZSBzaXplIGluY3JlYXNlcywgdGhlIGRlZ3JlZXMgb2YgZnJlZWRvbSBpbmNyZWFzZSwgYW5kIHRoZSB0LWRpc3RyaWJ1dGlvbiBhcHByb2FjaGVzIHRoZSBzdGFuZGFyZCBub3JtYWwgZGlzdHJpYnV0aW9uLgokJApUIFxzaW0gdF9cbnUKJCQKCiMgQ2hpLXNxdWFyZWQgZGlzdHJpYnV0aW9uCjxjZW50ZXI+CiAgPGltZyBzcmM9Imh3Ml8yLnBuZyIgd2lkdGg9IjM1MCI+CjwvY2VudGVyPgpUaGUgY2hpLXNxdWFyZWQgZGlzdHJpYnV0aW9uIGlzIHByaW1hcmlseSB1c2VkIGZvciBoeXBvdGhlc2lzIHRlc3Rpbmcgd2l0aCBjYXRlZ29yaWNhbCBkYXRhIG9yIGNvdW50cy4gSXQgaXMgY29tbW9ubHkgdXNlZCBmb3IgZ29vZG5lc3Mtb2YtZml0IHRlc3RzLCB3aGljaCBleGFtaW5lIGhvdyB3ZWxsIG9ic2VydmVkIGRhdGEgbWF0Y2ggZXhwZWN0ZWQgdmFsdWVzLCBhbmQgZm9yIHRlc3RzIG9mIGluZGVwZW5kZW5jZSwgd2hpY2ggZGV0ZXJtaW5lIHdoZXRoZXIgdHdvIGNhdGVnb3JpY2FsIHZhcmlhYmxlcyBhcmUgcmVsYXRlZC4gVGhlIHNoYXBlIG9mIHRoZSBjaGktc3F1YXJlZCBkaXN0cmlidXRpb24gZGVwZW5kcyBvbiB0aGUgbnVtYmVyIG9mIGRlZ3JlZXMgb2YgZnJlZWRvbSwgYW5kIGl0IGJlY29tZXMgbW9yZSBzeW1tZXRyaWMgYXMgdGhlIGRlZ3JlZXMgb2YgZnJlZWRvbSBpbmNyZWFzZS4KCkluIGFkZGl0aW9uLCB0aGUgY2hpLXNxdWFyZWQgZGlzdHJpYnV0aW9uIHBsYXlzIGFuIGltcG9ydGFudCByb2xlIHdoZW4gd29ya2luZyB3aXRoIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIGRhdGEuIElmIGRhdGEgY29tZXMgZnJvbSBhIG5vcm1hbCBwb3B1bGF0aW9uLCB0aGVuIGFmdGVyIHByb3BlciBzY2FsaW5nLCB0aGUgc2FtcGxlIHZhcmlhbmNlIGZvbGxvd3MgYSBjaGktc3F1YXJlZCBkaXN0cmlidXRpb24uIFN1cHBvc2Ugd2UgaGF2ZSBrIGluZGVwZW5kZW50IHN0YW5kYXJkIG5vcm1hbCByYW5kb20gdmFyaWFibGVzLiBJZiB3ZSBzcXVhcmUgZWFjaCBvbmUgYW5kIGFkZCB0aGVtIHRvZ2V0aGVyLCB0aGUgcmVzdWx0aW5nIHN1bSwgY2FsbGVkIFEsIGZvbGxvd3MgYSBjaGktc3F1YXJlZCBkaXN0cmlidXRpb24gd2l0aCBrIGRlZ3JlZXMgb2YgZnJlZWRvbS4KJCQKUT1cc3VtX3tpPTF9XmsgWl9pXjIgXHNpbSBcY2hpX2teMi4KJCQKVGhpcyByZXN1bHQgaXMgaW1wb3J0YW50IGJlY2F1c2UgYW55IG5vcm1hbGx5IGRpc3RyaWJ1dGVkIHZhcmlhYmxlIGNhbiBiZSBjb252ZXJ0ZWQgaW50byBhIHN0YW5kYXJkIG5vcm1hbCB2YXJpYWJsZSB1c2luZyBhIHotc2NvcmUuIEFmdGVyIHN0YW5kYXJkaXppbmcgdGhlIGRhdGEsIHdlIGNhbiBzcXVhcmUgdGhlc2UgdmFsdWVzIGFuZCBzdW0gdGhlbSwgd2hpY2ggcHJvZHVjZXMgYSBjaGktc3F1YXJlZCBkaXN0cmlidXRpb24uIEJlY2F1c2Ugc2FtcGxlIHZhcmlhbmNlIGlzIGJhc2VkIG9uIHNxdWFyZWQgZGV2aWF0aW9ucyBmcm9tIHRoZSBtZWFuLCBpdCBjYW4gYmUgc3RhbmRhcmRpemVkIGluIGEgc2ltaWxhciB3YXksIGFuZCB0aGUgcmVzdWx0aW5nIHN0YXRpc3RpYyBhbHNvIGZvbGxvd3MgYSBjaGktc3F1YXJlZCBkaXN0cmlidXRpb24uIAokJApcZnJhY3sobi0xKVNeMn17XHNpZ21hXjJ9IFxzaW0gXGNoaV97bi0xfV4yLgokJApBcyBhIHJlc3VsdCwgd2UgY2FuIHVzZSB0aGUgY2hpLXNxdWFyZWQgZGlzdHJpYnV0aW9uIHRvIGNvbnN0cnVjdCBjb25maWRlbmNlIGludGVydmFscyBmb3IgdGhlIHBvcHVsYXRpb24gdmFyaWFuY2UsIHRlc3QgaHlwb3RoZXNlcyBhYm91dCB2YXJpYW5jZSwgYW5kIGhlbHAgZGVyaXZlIHRoZSB0LWRpc3RyaWJ1dGlvbiwgd2hpY2ggd2lsbCBiZSBkaXNjdXNzZWQgaW4gdGhlIG5leHQgc2VjdGlvbi4KCiMgRi1kaXN0cmlidXRpb24KU2ltaWxhciB0byB0aGUgY2hpLXNxdWFyZWQgZGlzdHJpYnV0aW9uLCB0aGUgRiBkaXN0cmlidXRpb24gaXMgcmlnaHQtc2tld2VkLCBub24tbmVnYXRpdmUsIGFuZCBkZWZpbmVkIG9uIHRoZSBpbnRlcnZhbCAkWzAsIFxpbmZ0eSkkLiBJdHMgc2hhcGUgZGVwZW5kcyBvbiB0d28gZGVncmVlcyBvZiBmcmVlZG9tLiBUaGUgRiBkaXN0cmlidXRpb24gaXMgbWFpbmx5IHVzZWQgdG8gY29tcGFyZSB0d28gc291cmNlcyBvZiB2YXJpYXRpb24sIGVzcGVjaWFsbHkgd2hlbiBjb21wYXJpbmcgZXhwbGFpbmVkIHZhcmlhdGlvbiB0byB1bmV4cGxhaW5lZCB2YXJpYXRpb24gaW4gcmVncmVzc2lvbiwgb3Igd2hlbiBjb21wYXJpbmcgdHdvIHBvcHVsYXRpb24gdmFyaWFuY2VzLgoKVGhlIEYgZGlzdHJpYnV0aW9uIGlzIGZvcm1lZCBieSB0YWtpbmcgdGhlIHJhdGlvIG9mIHR3byBpbmRlcGVuZGVudCBzYW1wbGUgdmFyaWFuY2VzIHRoYXQgY29tZSBmcm9tIG5vcm1hbCBwb3B1bGF0aW9ucy4gU2luY2Ugc2FtcGxlIHZhcmlhbmNlcyBmb2xsb3cgY2hpLXNxdWFyZWQgZGlzdHJpYnV0aW9ucywgdGhlaXIgcHJvcGVybHkgc2NhbGVkIHJhdGlvIGZvbGxvd3MgYW4gRiBkaXN0cmlidXRpb24uIEFzIGEgcmVzdWx0LCB0aGUgRiBkaXN0cmlidXRpb24gY2FuIGJlIHVzZWQgdG8gdGVzdCB3aGV0aGVyIHR3byBwb3B1bGF0aW9uIHZhcmlhbmNlcyBhcmUgZXF1YWwuIEZvciBleGFtcGxlLCBpZiB0d28gY2xhc3NlcyB0YWtlIHRoZSBzYW1lIGV4YW0gYnV0IG9uZSBjbGFzcyBoYXMgbXVjaCBsZXNzIHZhcmlhdGlvbiBpbiBzY29yZXMgdGhhbiB0aGUgb3RoZXIsIHRoaXMgbWF5IHN1Z2dlc3QgdGhhdCB0aGUgdHdvIGNsYXNzZXMgYXJlIG5vdCBwZXJmb3JtaW5nIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMuIEFuIEYtdGVzdCBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgZGlmZmVyZW5jZSBpbiB2YXJpYW5jZXMgaXMgbGlrZWx5IGR1ZSB0byByYW5kb20gY2hhbmNlIG9yIHJlZmxlY3RzIGEgcmVhbCBkaWZmZXJlbmNlLgokJApGID0gXGZyYWN7U18xXjIvXHNpZ21hXzFeMn17U18yXjIvXHNpZ21hXzJeMn0gXHNpbSBGX3tuXzEtMSxcOyBuXzItMX0KJCQKSW4gcmVncmVzc2lvbiBhbmQgQU5PVkEsIHRoZSBGIHN0YXRpc3RpYyBpcyBjYWxjdWxhdGVkIGFzIHRoZSByYXRpbyBvZiBleHBsYWluZWQgdmFyaWF0aW9uIHZzIHVuZXhwbGFpbmVkIHZhcmlhdGlvbiwgTVNSL01TRS4gSWYgdGhlIG1vZGVsIGV4cGxhaW5zIGxpdHRsZSBtb3JlIHRoYW4gcmFuZG9tIG5vaXNlLCB0aGUgRiB2YWx1ZSB3aWxsIGJlIGNsb3NlIHRvIDEuIElmIHRoZSBtb2RlbCBleHBsYWlucyBhIGxhcmdlIGFtb3VudCBvZiB2YXJpYXRpb24sIHRoZSBGIHZhbHVlIHdpbGwgYmUgbXVjaCBsYXJnZXIgdGhhbiAxLiBUaGlzIGhlbHBzIHlvdSBldmFsdWF0ZSBob3cgZ29vZCBvZiBhIGZpdCB5b3VyIG1vZGVsIGlzLgpUaGVyZWZvcmUsIHRoZSBGIGRpc3RyaWJ1dGlvbiBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9ic2VydmVkIHBhdHRlcm5zIGluIHRoZSBkYXRhIGFyZSBsaWtlbHkgZHVlIHRvIHJlYWwgcmVsYXRpb25zaGlwcyBvciBzaW1wbHkgZHVlIHRvIHJhbmRvbSB2YXJpYXRpb24uCiQkCkYgPSBcZnJhY3tNU1J9e01TRX0gXHNpbSBGX3twLFw7IG4tcC0xfQokJApUaGVyZWZvcmUsIHRoZSBGIGRpc3RyaWJ1dGlvbiBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9ic2VydmVkIHBhdHRlcm5zIGluIHRoZSBkYXRhIGFyZSBsaWtlbHkgZHVlIHRvIHJlYWwgcmVsYXRpb25zaGlwcyBvciBzaW1wbHkgZHVlIHRvIHJhbmRvbSB2YXJpYXRpb24uCgoK